home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- import glob
- import string
- import os.path as os
- from LocaleInfo import LocaleInfo
-
- class ExceptionMultpleConfigurations(Exception):
- ''' error when multiple languages are symlinked '''
- pass
-
-
- class ExceptionUnconfigured(Exception):
- ''' error if no configuration is set '''
- pass
-
-
- class ExceptionNoConfigForLocale(Exception):
- ''' error if there is no config for the given locale '''
- pass
-
-
- class FontConfigHack(object):
- ''' abstract the fontconfig hack '''
-
- def __init__(self, datadir = '/usr/share/language-selector/', globalConfDir = '/etc/fonts'):
- self.datadir = '%s/fontconfig' % datadir
- self.globalConfDir = globalConfDir
- self.li = LocaleInfo('%s/data/languagelist' % datadir)
-
-
- def _getLocaleCountryFromFileName(self, name):
- '''
- internal helper to extracr from our fontconfig filenames
- of the form 69-language-selector-zh-tw.conf the locale
- and country
-
- returns string of the form locale_COUTNRY (e.g. zh_TW)
- '''
- fname = os.path.splitext(os.path.basename(name))[0]
- (head, ll, cc) = string.rsplit(fname, '-', 2)
- return '%s_%s' % (ll, cc.upper())
-
-
- def getAvailableConfigs(self):
- """ get the configurations we have as a list of languages
- (returns a list of ['zh_CN','zh_TW'])
- """
- res = []
- pattern = '%s/conf.avail/69-language-selector-*' % self.globalConfDir
- for name in glob.glob(pattern):
- res.append(self._getLocaleCountryFromFileName(name))
-
- return res
-
-
- def getCurrentConfig(self):
- """ returns the current language configuration as a string (e.g. zh_CN)
-
- if the configfile is not a symlink it raises a
- ExceptionNotSymlink exception
- if the file dosn't exists raise a
- ExceptionUnconfigured exception
- """
- pattern = '%s/conf.d/69-language-selector-*' % self.globalConfDir
- current_config = glob.glob(pattern)
- if len(current_config) == 0:
- raise ExceptionUnconfigured()
- len(current_config) == 0
- if len(current_config) > 1:
- raise ExceptionMultipleConfigurations()
- len(current_config) > 1
- return self._getLocaleCountryFromFileName(current_config[0])
-
-
- def removeConfig(self):
- ''' removes the current fontconfig-voodoo configuration
- and do some sanity checking
- '''
- pattern = '%s/conf.d/*-language-selector-*' % self.globalConfDir
- for f in glob.glob(pattern):
- if os.path.exists(f):
- os.unlink(f)
- continue
-
-
-
- def setConfig(self, locale):
- """ set the configuration for 'locale'. if locale can't be
- found a NoConfigurationForLocale exception it thrown
- """
- if locale not in self.getAvailableConfigs():
- raise ExceptionNoConfigForLocale()
- locale not in self.getAvailableConfigs()
- self.removeConfig()
- (ll, cc) = locale.split('_')
- basedir = '%s/conf.avail/' % self.globalConfDir
- for pattern in [
- '*-language-selector-%s-%s.conf' % (ll, cc.lower()),
- '*-language-selector-%s.conf' % ll]:
- for f in glob.glob(os.path.join(basedir, pattern)):
- fname = os.path.basename(f)
- from_link = os.path.join(self.globalConfDir, 'conf.avail', fname)
- to_link = os.path.join(self.globalConfDir, 'conf.d', fname)
- os.symlink(from_link, to_link)
-
-
- return True
-
-
- def setConfigBasedOnLocale(self):
- """ set the configuration based on the locale in LocaleInfo. If
- no configuration is found the fontconfig config is set to
- 'none'
- Can throw a exception
- """
- lang = self.li.getDefaultLanguage()
- self.setConfig(lang)
-
-
- if __name__ == '__main__':
- fc = FontConfigHack()
- print 'available: ', fc.getAvailableConfigs()
-
- try:
- config = fc.getCurrentConfig()
- except ExceptionUnconfigured:
- print 'unconfigured'
-
- print 'set config: ', fc.setConfig('zh_CN')
- print 'current: ', fc.getCurrentConfig()
-
- try:
- print 'run auto mode: ', fc.setConfigBasedOnLocale()
- except ExceptionNoConfigForLocale:
- print 'no config for this locale'
-
- print 'removeConfig()'
- fc.removeConfig()
-
- try:
- config = fc.getCurrentConfig()
- print 'ERROR: have config after calling removeConfig()'
- except ExceptionUnconfigured:
- print 'unconfigured (as expected)'
- except:
- None<EXCEPTION MATCH>ExceptionUnconfigured
-
-
- None<EXCEPTION MATCH>ExceptionUnconfigured
-